package io.renren.modules.module.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.renren.modules.module.dao.ModuleDaox;
import io.renren.modules.module.entity.Module;
import io.renren.modules.module.entity.vo.AllModule;
import io.renren.modules.module.entity.vo.AllProductUser;
import io.renren.modules.module.service.ModuleServicex;
import io.renren.modules.product.entity.ProductEntity;

import io.renren.modules.product.service.ProductService;
import io.renren.modules.sys.entity.SysUserEntity;
import io.renren.modules.sys.service.SysUserService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author miaotongli
 */
@Service
public class ModuleServiceImplx extends ServiceImpl<ModuleDaox,Module > implements ModuleServicex {
    @Autowired
    private ModuleDaox moduleDaox;
    @Autowired
    private ProductService productService;
    @Autowired
    private SysUserService sysUserService;
    @Autowired
    private ModuleBugServiceImpl moduleBugService;

    @Override
    public List<AllModule> getModule(Long productId, Long page, Long limit,String moduleName) {
        Page<Module> modulePage = new Page<>(page, limit);
        moduleDaox.selectPage(modulePage, new QueryWrapper<Module>()
                .eq("product_id",productId)
                .eq(StringUtils.isNotEmpty(moduleName),"module_name",moduleName)
                .orderByDesc("create_time"));
        List<Module> records = modulePage.getRecords();
        List<AllModule> collect = records.stream().map((item) -> {
            AllModule allModule = new AllModule();
            BeanUtils.copyProperties(item, allModule);
            Long moduleUser = item.getModuleUser();
            Long productId1 = item.getProductId();
            ProductEntity productEntity = productService.getById(productId1);
            SysUserEntity sysUserEntity = sysUserService.findAllMoudle(moduleUser);
            allModule.setModuleUserName(sysUserEntity.getUsername());
            allModule.setProductName(productEntity.getProductName());
            return allModule;
        }).collect(Collectors.toList());
        return collect;
    }

    @Override
    public boolean updateModule(Module module) {
        QueryWrapper<Module> moduleQueryWrapper = new QueryWrapper<Module>()
                .eq("module_name", module.getModuleName())
                .eq("product_id", module.getProductId())
                .eq("module_user",module.getModuleUser());
        Module selectOne = baseMapper.selectOne(moduleQueryWrapper);
        if (selectOne==null){
            baseMapper.updateById(module);
            return true;
        }
        return false;
    }

    @Override
    public AllModule getModuleMeaasge(Long moduleId) {
        AllModule allModule = new AllModule();
        //得到模块信息
        Module module = moduleDaox.selectById(moduleId);
        BeanUtils.copyProperties(module,allModule);
        //得到产品名字
        ProductEntity productEntity = productService.getById(module.getProductId());
        allModule.setProductName(productEntity.getProductName());
        //得到用户名字
        SysUserEntity sysUserEntity = sysUserService.findAllMoudle(module.getModuleUser());
        allModule.setModuleUserName(sysUserEntity.getUsername());
        return allModule;
    }



    @Override
    public Boolean saveInfo(Module module) {
        Module module1 = moduleDaox.selectOne(new QueryWrapper<Module>()
                .eq("module_name", module.getModuleName())
                .eq("product_id",module.getProductId()));
        if (module1==null){
            //先向模块表中插入信息
            moduleDaox.insert(module);
            return true;
        }else {
            return false;
        }
    }

    @Override
    public void deleteModule(Long moduleId) {
        baseMapper.deleteById(moduleId);
        HashMap<String, Object> objectHashMap = new HashMap<>();
        objectHashMap.put("module_id",moduleId);
        moduleBugService.removeByMap(objectHashMap);
    }

    @Override
    public List<Module> getAllModuleByProductId(Long productId) {
        return this.list(new LambdaUpdateWrapper<Module>().eq(Module::getProductId,productId));
    }
}
